/* 
 * File:   JServerStub.h
 * Author: johnneyshi
 *
 * Created on 2013年5月14日, 下午8:10
 */

#ifndef JSERVERSTUB_H
#define	JSERVERSTUB_H
#include "JInOutPut.h"
#include "JStubArgument.h"
#include "JCommitConflict.h"
#include "JWorkingCopies.h"
#include "JRepositoryOperationResult.h"
#include "JString.h"
#include "JRepositoryEntry.h"

/*负责把数据参数化*/
class JServerStub 
{
public:
    JServerStub();
    virtual ~JServerStub();
    JCommitConflict Commit(JInOutPut& _strea,JWorkingCopies& _workingCopies,JWorkingCopiesBaseFile& _copyBaseFile,JBaseFile& _baseFile);
    JUpdateConflict Update(JInOutPut& _strea,JWorkingCopies& _workingCopies,JWorkingCopiesBaseFile& _copyBaseFile);
    JRepositorySearchResult Search(JInOutPut& _strea,JWorkingCopies& _workingCopies,JString& _fullFileName, JString& _versionID);
    JRepositoryOperationResult GetLock(JWorkingCopies& _workingCopies,JString& lockType);
    JRepositoryOperationResult ReleaseLock(JWorkingCopies& _workingCopies);
    //数据到来是，用这个函数解析数据，返回值是表示这一个处理周期是否完成，当得到ReleaseLock的时候，返回true，否则返回false
    bool AnalysisCommand();
    //产生的返回值，由这个函数返回
    void PackReturnValue(JStubArgument& _arg);
    
//    void StubHead();
private:
//    /**/
//    JStubArgument* StubArgumentFactory(JInOutPut& _strea,std::string _arg);
    //这是读入的流
    JInOutPut* pInStrea;
    //这是输出的流
    JInOutPut* pOutStrea;
    //只有一个entry这样就不用重复建，消耗内存和cpu
    static JRepositoryEntry entry;
};

#endif	/* JSERVERSTUB_H */

